/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.cast.teseg.gui;

import edu.cast.teseg.Listeners.ManejoEventos;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JSlider;
import javax.swing.JTextField;
import javax.swing.border.TitledBorder;
import java.awt.Font;

/**
 *
 * @author edgarin
 */
public class GuiPrincipal extends JFrame {
    
    private ManejoEventos manejoEventos;
    private JPanel panelIzquierdo, panelDerecho, panelInferior, panelSuperior, panelPrincipal;
    private JButton generarBtn;
    private JRadioButton ingenuo, ingenuoOpt, voraz, dinamico;
    private ButtonGroup grupoAlgoritmos;
    private JLabel probaLb, numIndLb, numConLb, generarLb, cargandoGrafoLb, cargandoDiagramaLb;
    private JTextField contProb, numNodos, numEdges;   
    private JSlider barraProb;
    private JMenuBar barraMenu;
    private JMenu menuARchivo, menuAyuda;
    private JMenuItem itemSalir, itemContenido, itemAcercaDe, itemLicencia, itemAbrir, itemGuardar;

    public GuiPrincipal() {     
        super("TESEG");
        
        this.manejoEventos = new ManejoEventos();
        this.panelPrincipal = new JPanel(new BorderLayout());
        this.panelSuperior = new JPanel();
        this.panelSuperior.setLayout(new FlowLayout(0,20,20));
        this.panelIzquierdo = new JPanel();        
        this.panelIzquierdo.setLayout(new BorderLayout());
        this.panelDerecho = new JPanel();        
        this.panelDerecho.setLayout(new BorderLayout());
        this.panelInferior = new JPanel();
        this.panelInferior.setLayout(new FlowLayout(0,20,20));
        
        this.barraMenu = new JMenuBar();        
        this.menuARchivo = new JMenu("Archivo");
        this.itemAbrir = new JMenuItem("Abrir");
        this.itemGuardar = new JMenuItem("Guardar");
        this.itemSalir = new JMenuItem("Salir");
        this.itemSalir.addActionListener(this.manejoEventos);
        this.itemAbrir.addActionListener(this.manejoEventos);
        this.itemGuardar.addActionListener(this.manejoEventos);
        this.menuARchivo.add(this.itemAbrir);
        this.menuARchivo.add(this.itemGuardar);
        this.menuARchivo.add(this.itemSalir);
        this.barraMenu.add(this.menuARchivo);
        this.menuAyuda = new JMenu("Ayuda");        
        this.itemContenido = new JMenuItem("Contenido de Ayuda");        
        this.itemAcercaDe = new JMenuItem("Acerca De");
        this.itemLicencia = new JMenuItem("Licencia");        
        this.itemContenido.addActionListener(this.manejoEventos);
        this.itemLicencia.addActionListener(this.manejoEventos);
        this.itemAcercaDe.addActionListener(this.manejoEventos);        
        this.menuAyuda.add(this.itemContenido);
        this.menuAyuda.add(this.itemLicencia);
        this.menuAyuda.add(this.itemAcercaDe);
        this.barraMenu.add(this.menuAyuda);
        this.generarBtn = new JButton();       
        this.probaLb = new JLabel();
        this.numIndLb = new JLabel();
        this.numConLb = new JLabel();
        this.generarLb = new JLabel();
        this.cargandoGrafoLb = new JLabel();
        this.cargandoDiagramaLb = new JLabel();
        this.contProb = new JTextField(3);
        this.numNodos = new JTextField(4);
        this.numEdges = new JTextField(6);
        this.barraProb = new JSlider (0,100,50);
        
        this.generarBtn.setText("generar grafo");
        this.generarBtn.setToolTipText("genera un grafo aleatorio");
        this.generarBtn.addMouseListener(this.manejoEventos);        
        this.probaLb.setText("Probabilidad Conocidos:");
        this.numIndLb.setText("Numero de Indivuduos: ");
        this.numConLb.setText("Cant Conocidos: ");
        this.generarLb.setText("Click para generar Grafo: ");
        this.cargandoGrafoLb.setText("Cargando Grafo");
        this.cargandoGrafoLb.setFont(new Font("Monospaced", Font.BOLD, 14));
        this.cargandoDiagramaLb.setText("Cargando Diagrama");
        this.cargandoDiagramaLb.setFont(new Font("Monospaced", Font.BOLD, 14));
        this.numEdges.setEditable(false);
        this.barraProb.setBorder(new TitledBorder(" (-) Probabilidad Conocidos (+)"));
        this.barraProb.addChangeListener(this.manejoEventos);
        this.numNodos.setText("10");
        this.contProb.setText("0.5");
        
        this.panelSuperior.add(barraMenu, BorderLayout.NORTH);
        this.panelSuperior.add(this.numIndLb);
        this.panelSuperior.add(this.numNodos);
        this.panelSuperior.add(this.probaLb);
        this.panelSuperior.add(this.contProb);
        this.panelSuperior.add(this.generarLb);
        this.panelSuperior.add(this.generarBtn);        
        this.panelInferior.add(this.barraProb);
        this.panelInferior.add(this.numConLb);
        this.panelInferior.add(this.numEdges);
        
        this.ingenuo = new JRadioButton("ingenuo",true);
        this.ingenuoOpt = new JRadioButton("ingenuo optimizado",false);
        this.voraz = new JRadioButton("voraz", false);
        this.dinamico = new JRadioButton("dinamico", false);
        this.ingenuo.addItemListener(this.manejoEventos);
        this.ingenuoOpt.addItemListener(this.manejoEventos);
        this.voraz.addItemListener(this.manejoEventos);
        this.dinamico.addItemListener(this.manejoEventos);
        this.grupoAlgoritmos = new ButtonGroup();
        this.grupoAlgoritmos.add(this.ingenuo);
        this.grupoAlgoritmos.add(this.ingenuoOpt);
        this.grupoAlgoritmos.add(this.voraz);
        this.grupoAlgoritmos.add(this.dinamico);
        this.panelInferior.add(this.ingenuo);
        this.panelInferior.add(this.ingenuoOpt);
        this.panelInferior.add(this.voraz);
        this.panelInferior.add(this.dinamico);
        
        this.panelPrincipal.add(this.panelDerecho, BorderLayout.EAST);
        this.panelPrincipal.add(this.panelIzquierdo, BorderLayout.CENTER);
        this.panelPrincipal.add(this.panelSuperior, BorderLayout.NORTH);              
        
        this.getContentPane().add(this.barraMenu, BorderLayout.NORTH);
        this.getContentPane().add(this.panelPrincipal, BorderLayout.CENTER);
        this.getContentPane().add(this.panelInferior, BorderLayout.SOUTH);      
        
    }
    
    //**** metodo para iniciar el frame ****//
    public void crearGui(){        
        this.manejoEventos.setGuiPrincipal(this);
        this.pack();
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setSize(850, 700);
        this.setResizable(false);
        this.setLocationRelativeTo(null);
        this.setVisible(true);
    }
    
    public JPanel getPanelPorcentaje(){ return this.panelDerecho; }
    
    public JPanel getPanelGrafo(){ return this.panelIzquierdo; }

    public ManejoEventos getClikeador(){ return this.manejoEventos; }    
    
    public void setMensajeError(String x){ JOptionPane.showMessageDialog(this, x);  } //*** metodo que envia un mensaje de error al isiario *** //

    public JSlider getBarraProb() { return barraProb; }

    public JButton getGenerarBtn() { return generarBtn; }

    public JLabel getCargandoGrafoLb(){return cargandoGrafoLb;}
    
    public JLabel getCargandoDiagramaLb(){return cargandoDiagramaLb;}

    public JTextField getNumNodos() { return numNodos; }

    public JTextField getContProb() { return contProb; }

    public JTextField getNumEdges() { return numEdges; }

    public JMenuItem getItemAcercaDe() { return itemAcercaDe; }

    public JMenuItem getItemSalir() { return itemSalir; }

    public JMenuItem getItemContenido() { return itemContenido; }

    public JMenuItem getItemLicencia() { return itemLicencia; }

    public JMenuItem getItemAbrir() { return itemAbrir; }

    public JMenuItem getItemGuardar() { return itemGuardar; }

    public JRadioButton getIngenuo() { return ingenuo; }

    public JRadioButton getIngenuoOpt() { return ingenuoOpt; }

    public JRadioButton getVoraz() { return voraz; }

    public JRadioButton getDinamico() { return dinamico; }
   
    public void anuncioCargandoGrafo(){
        System.out.println("CARGANDO GRAFO");
        this.panelIzquierdo.removeAll();
        this.panelIzquierdo.add(this.cargandoGrafoLb, BorderLayout.CENTER);
        this.panelIzquierdo.updateUI();
        this.validate();
        this.repaint();
    }
    //*** metodo que permite mostrar la palbra cargando mientras se evaluan los grafso ***//
    public void anuncioCargandoDiagrama(){
       System.out.println("CARGANDO DIAGRAMA");
       this.panelDerecho.removeAll();
       this.panelDerecho.add(this.cargandoDiagramaLb, BorderLayout.CENTER);
       this.panelDerecho.updateUI();
       this.validate();
       this.repaint();
    }

    //*** metodo para enviar mensaje de informacion del proyecto ***//
    public void mensajeDeAcercaDe(){
        JOptionPane.showMessageDialog(this, "Fundamentos de Analisis y Diseño de Algoritmos \n Proyecto TESEG \n Estudiantes: \n Edgar Mejia Castro \n Edwin Ricardo Gamboa \n Franco Junnior Cundar");
    }
    
    //*** metodo para enviar un mensaje de como iniciar la aplicacion ***//
    public void mensajeAyuda(){
        JOptionPane.showMessageDialog(this, "Para Iniciar se debe generar el grafo o cargar uno existente");  
    }
    
    //***  metodo para mostrar mensaje de Licencia ***//
    public void mensajeLicencia(){
        JOptionPane.showMessageDialog(this,"This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.\n To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/3.0/ \n or send a letter to Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA.");
    }
    
}